import person from './person.mjs'
// export default
// import xxx from ==> xxx {defaut as xxxx}
// import {xxxx} form './xxx'

// var a = 1;
// var b = 2;
// // for i := 0; i < 10; i++ {
// // }
// for (var i=0;i<10; i++) {

// }

// console.log(person.firstName, person.lastName, person.year)


var a = [1, 2, '张三']

// for (var item of a) {
//     console.log(item)
//     fn(item)
// }

// map reduce的写法, 你传递一个fn给他
// x => 
// a.forEach(item => {
//     console.log(item)
// })

// var b = {name: '张三', age: 20}
// // ["name", "age"]
// for (var key of Object.keys(b)) {
//     console.log(key, b[key])
// }


// function callback() {
//     console.log('Done');
// }
// console.log('before setTimeout()');
// setTimeout(callback, 1000); // 1秒钟后调用callback函数
// console.log('after setTimeout()');


// 模拟一个网络请求: v1
var mock_sucess = true
function QueryBlog(on_success, on_failed) {
   // 发起一次网络请求, 耗时1秒
   setTimeout(function() {
        if (mock_sucess) {
            // 请求结束后,如果成功调用on_success
            on_success({name: '张三', age: 10})
        } else {
            // 如果失败就调用on_failed
            on_failed(new Error('请求失败'))
        }
   }, 5000);
}


// QueryBlog(
//     // on_success fn
//     // {name: '张三', age: 10}
//     (resp) => {
//         console.log(resp)
//     },
//     // on_failed fn
//     // new Error('请求失败')
//     (err) => {
//         console.log(err)
//     }
// )

// 处理响应结果 xxx
console.log("处理完成")


// QueryBlog(
//     // on_success fn
//     // {name: '张三', age: 10}
//     (resp) => {
//         console.log(resp)
//     },
//     // on_failed fn
//     // new Error('请求失败')
//     (err) => {
//         console.log(err)
//     }
// )
// Promise: 对象, fn(on_sucess, on_failed)
//  on_sucess(value) any
//  on_failed(reason) any 
// var p = new Promise(QueryBlog)
// p.then(resp => {
//     console.log(resp)
//     // do(resp)
// }).catch(err => {
//     console.log(err)
// }).finally(() => {
//     console.log('finally')
// })

// 定义了一个异步函数: async 关键字
// AsyncQueryBlog 就这函数就被标记为了一个异步函数？ 异步函数怎么执行?
async function AsyncQueryBlog() {
    var p = new Promise(QueryBlog)
    // 这个操作会阻塞一秒, 阻塞在excutor内部, 不会对主线程造成影响
    console.log("query start ...")
    // on_success({name: '张三', age: 10}) ==>  {name: '张三', age: 10}
    var resp = await p
    console.log("query end ...")
    console.log(resp)
 }

// 调用异步函数
AsyncQueryBlog()
